package main

//
///*
//#include <stdio.h>
//#include <stdlib.h>  // 用于内存释放函数
//#include "crpc.h"
//
//// 消息处理回调函数
//SRPC_RESULT message_proc(int msgType, const char * service, const char * routine, const char * payload,
//                         const char * sender, const char * target, const char * peerIP, SRPC_DATABUF retdata,
//                         const void * userptr) {
//    printf("Received message: type=%d, service=%s, routine=%s\n", msgType, service, routine);
//    return SRPC_SOK;
//}
//
//// 连接成功回调函数
//void connready_cb(const char * jsonstr, const void * userptr) {
//    printf("Connected to engine. JSON: %s\n", jsonstr);
//}
//
//// 连接断开回调函数
//void connreset_cb(uint32_t retcode, const void * userptr) {
//    printf("Disconnected from engine. Retcode: %u\n", retcode);
//}
//
//// 封装C++异常捕获（关键改进）
//int safe_srpc_dealer_create(SRPC_MESSAGE_PROC msg_proc, SRPC_CONNREADY_CB ready_cb,
//                           SRPC_CONNRESET_CB reset_cb, void* user_ptr, SRPC_DEALER* out_dealer) {
//    try {
//        *out_dealer = srpc_dealer_create(msg_proc, ready_cb, reset_cb, user_ptr);
//        return (*out_dealer != NULL) ? 0 : -1;  // 0表示成功，-1表示创建失败
//    } catch (const soraka::stk_result& e) {
//        fprintf(stderr, "Exception in srpc_dealer_create: %s\n", e.what());
//        return -2;  // -2表示捕获到异常
//    } catch (...) {
//        fprintf(stderr, "Unknown exception in srpc_dealer_create\n");
//        return -3;  // -3表示未知异常
//    }
//}
//*/
//import "C"
//import (
//	"fmt"
//	"os"
//	"os/signal"
//	"syscall"
//)
//
//func main() {
//	// 1. 创建消息处理器（使用异常安全的封装函数）
//	var dealer C.SRPC_DEALER
//	msgProc := C.srpc_message_proc(C.message_proc)
//
//	// 调用封装的异常捕获函数创建dealer
//	createResult := C.safe_srpc_dealer_create(msgProc, nil, nil, nil, &dealer)
//	if createResult != 0 {
//		fmt.Printf("Failed to create dealer. Error code: %d\n", createResult)
//		return
//	}
//	fmt.Println("Dealer created successfully.")
//	defer C.srpc_dealer_delete(dealer) // 确保资源释放
//
//	// 2. 等待中断信号（优雅退出）
//	sigCh := make(chan os.Signal, 1)
//	signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
//	fmt.Println("SRPC client running (only dealer created). Press Ctrl+C to exit.")
//	<-sigCh
//
//	fmt.Println("Shutting down...")
//	fmt.Println("Program exited successfully.")
//}
